package jmine.tec.services.api.export;

/**
 * Classe abstrata para facilitar a exportação de associações não bi-direcionais.<br/>
 * Ex.:<br/>
 * Entidade A tem referencia para B, mas B não possui referencia para A e a exportação de B precisa saber quem é a entidade A para poder
 * efetuar a associação. Nesse caso, não é suficiente que o exporter de A retorne a lista de B's associados (faltaria informação para o
 * exporter de B).<br/>
 * A solução é retornar uma instância de uma implementação concreta de AbstractImplicitAssociation representando a associação de A
 * (baseEntity) com B (associatedEntity). O Exporter dessa associação será responsável por gerar um serviço que crie B (caso B seja uma
 * entidade fraca, caso seja forte não há necessidade) e associe com a entidade A.
 * 
 * @author lundberg
 * @param <B> entidade base da associação
 * @param <A> entidade associada à entidade de tipo B
 */
public abstract class AbstractImplicitAssociation<B, A> {

    private final B baseEntity;

    private final A associatedEntity;

    /**
     * Construtor padrão
     * 
     * @param baseEntity baseEntity
     * @param associatedEntity associatedEntity
     */
    public AbstractImplicitAssociation(B baseEntity, A associatedEntity) {
        this.baseEntity = baseEntity;
        this.associatedEntity = associatedEntity;
    }

    /**
     * @return the strongEntity
     */
    public B getBaseEntity() {
        return this.baseEntity;
    }

    /**
     * @return the weakEntity
     */
    public A getAssociatedEntity() {
        return this.associatedEntity;
    }
}
